#ifndef _SENSOR_DS18B20_H_
#define _SENSOR_DS18B20_H_

#include "Delay.h"

//-----------------------------------------------	
//DS18B20引脚宏定义						

#define DS18B20_GPIO_PORT		GPIOA
#define DS18B20_GPIO_PIN		GPIO_PIN_5
#define DS18B20_GPIO_CLK   	RCC_APB2Periph_GPIOA


//输出状态定义
#define OUT 1
#define IN  0


//-----------------------------------------------	

/**
 * @if Eng
 * @brief Initializes the DS18B20 temperature sensor 
 * @param None
 * @return 1 if initialization successful, 0 if failed
 * @else
 * @brief 初始化DS18B20温度传感器
 * @param 无
 * @return 1表示初始化成功，0表示失败 
 * @endif 
 */
uint8_t DS18B20_Init(void);//初始化DS18B20

/**
 * @if Eng 
 * @brief Gets the current temperature reading 
 * @param None
 * @return Temperature value in degrees Celsius (double precision)
 * @else 
 * @brief 获取当前温度读数 
 * @param 无 
 * @return 温度值(摄氏度，双精度浮点)
 * @endif 
 */
double DS18B20_Get_Temp(void);//获取温度

/**
 * @if Eng
 * @brief Starts temperature conversion process
 * @param None 
 * @result Temperature conversion begins (results available after conversion time)
 * @else 
 * @brief 开始温度转换过程
 * @param 无
 * @result 温度转换开始(转换时间后结果可用)
 * @endif 
 */
void DS18B20_Start(void);//开始温度转换

/**
 * @if Eng
 * @brief Writes one byte to DS18B20 
 * @param dat - Byte to write (8-bit value)
 * @result Byte is transmitted to DS18B20
 * @else
 * @brief 向DS18B20写入一个字节 
 * @param dat - 要写入的字节(8位值)
 * @result 字节被传输到DS18B20 
 * @endif 
 */
void DS18B20_Write_Byte(uint8_t dat);//写入一个字节

/**
 * @if Eng
 * @brief Reads one byte from DS18B20
 * @param None 
 * @return Byte read from DS18B20 (8-bit value)
 * @else
 * @brief 从DS18B20读取一个字节 
 * @param 无 
 * @return 从DS18B20读取的字节(8位值)
 * @endif 
 */
uint8_t DS18B20_Read_Byte(void);//读出一个字节

/**
 * @if Eng
 * @brief Reads single bit from DS18B20 
 * @param None
 * @return Bit value read (0 or 1)
 * @else
 * @brief 从DS18B20读取单个位 
 * @param 无 
 * @return 读取的位值(0或1)
 * @endif 
 */
uint8_t DS18B20_Read_Bit(void);//读出一个位

/**
 * @if Eng
 * @brief Sets DS18B20 pin mode 
 * @param mode - Mode to set (0 for input, 1 for output)
 * @result DS18B20 data pin mode is configured 
 * @else 
 * @brief 设置DS18B20引脚模式 
 * @param mode - 要设置的模式(0为输入，1为输出)
 * @result DS18B20数据引脚模式被配置 
 * @endif 
 */
void DS18B20_Mode(uint8_t mode);//DS18B20引脚输出模式控制

/**
 * @if Eng
 * @brief Checks if DS18B20 is present on the bus
 * @param None 
 * @return 1 if DS18B20 detected, 0 if not present 
 * @else 
 * @brief 检测总线上是否存在DS18B20 
 * @param 无 
 * @return 1表示检测到DS18B20，0表示不存在
 * @endif 
 */
uint8_t DS18B20_Check(void);//检测是否存在DS18B20

/**
 * @if Eng
 * @brief Resets DS18B20 device 
 * @param None
 * @result DS18B20 is reset and ready for new commands 
 * @else 
 * @brief 复位DS18B20设备
 * @param 无
 * @result DS18B20被复位并准备接收新命令 
 * @endif 
 */
void DS18B20_Rst(void);//复位DS18B20   

#endif


